<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      // 1. reduce(function(prev,item[,index,arr]) {},初始值)
      // 参数：回调函数。然后回调函数里面有四个参数，prev代表上一个调用函数的返回值，
      // item代表当前元素，index代表当前元素的索引，arr代表着数组本身。初始值默认为0
      // 作用：常用来累加求和
      // 返回值：累加的总和
      // 例如：
      const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
      const sum = arr.reduce((prev, item) => {
        return prev + item
      })
      console.log(sum) // 55

      // 2. filter(function (item[,index,arr]) {})
      // 参数：回调函数。然后回调函数中有三个参数.
      // item代表当前元素，index代表当前元素的索引，arr代表着数组本身。
      // 作用：筛选出满足条件的元素
      // 返回值：满足条件的新数组
      // 例如：
      const filter = arr.filter((item) => {
        return item > 5
      })
      console.log(filter) //[6,7,8,9,10]

      // 3. some(function (item[,index,arr]) {})
      // 参数：回调函数。然后回调函数中有三个参数.
      // item代表当前元素，index代表当前元素的索引，arr代表着数组本身。
      // 作用：方法测试数组中是不是至少有 1 个元素通过了被提供的函数测试
      // 返回值：返回一个布尔值
      // 例如：
      const some = arr.some((item) => {
        return item > 5
      })
      console.log(some) //true

      const some1 = arr.some((item) => {
        return item > 11
      })
      console.log(some1) //false
      // 4. every(function (item[,index,arr]) {})
      // 参数：回调函数。然后回调函数中有三个参数.
      // item代表当前元素，index代表当前元素的索引，arr代表着数组本身。
      // 作用：方法测试一个数组内的所有元素是否都能通过某个指定函数的测试
      // 返回值：返回一个布尔值
      // 例如：
      const every = arr.every((item) => {
        return item > 5
      })
      console.log(every) //false

      const every1 = arr.every((item) => {
        return item > 0
      })
      console.log(every1) //true

      // 5. map(function (item[,index,arr]) {})
      // 参数：回调函数。然后回调函数中有三个参数.
      // item代表当前元素，index代表当前元素的索引，arr代表着数组本身。
      // 作用：遍历数组，并可以处理数据
      // 返回值：返回一个新的数组
      // 例如：

      const map = arr.map((item) => item * item)
      console.log(map) //[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

      // 6. push
      // 参数：接收一个或多个参数
      // 作用：向指定数组尾部添加元素
      // 返回值：新数组的长度
      // 例如：
      const arr1 = [1, 2, 3, 4, 5]
      console.log(arr1.push(6)) //6
      console.log(arr1) // [1,2,3,4,5,6]

      // 7. pop
      // 参数：无
      // 作用：删除数组中最后一个元素
      // 返回值：被删除的那个元素
      // 例如：
      const arr2 = [1, 2, 3, 4, 5]
      console.log(arr2.pop()) //5
      console.log(arr2) // [1,2,3,4]

      // 8. unshift
      // 参数：接收一个或多个参数
      // 作用：向指定数组头部添加元素
      // 返回值：新数组的长度
      // 例如：
      const arr3 = [1, 2, 3, 4, 5]
      console.log(arr3.unshift(0)) //6
      console.log(arr3) //[0,1, 2, 3, 4, 5]

      // 9. shift
      // 参数：无
      // 作用：删除数组中第一个元素
      // 返回值：被删除的那个元素
      // 例如：
      const arr4 = [1, 2, 3, 4, 5]
      console.log(arr4.shift()) //1
      console.log(arr4) // [2,3,4,5]

      // 10. sort(function(a,b) {})
      // 参数：回调函数，回调函数中有两个形参
      // 作用：将数组进行排序,还可以让对象按照某个属性排序
      // 返回值：返回排序后的该数组
      // 例如：
      const arr5 = [1, 4, 3, 6, 9, 7]
      // 升序
      console.log(
        arr5.sort((a, b) => {
          return a - b
        })
      ) //[1, 3, 4, 6, 7, 9]

      // 降序
      console.log(
        arr5.sort((a, b) => {
          return b - a
        })
      ) //[9, 7, 6, 4, 3, 1]

      const arr6 = [
        { name: '王行1', age: 22 },
        { name: '王行2', age: 12 },
        { name: '王行3', age: 19 },
        { name: '王行,你在狗叫什么', age: 32 },
      ]
      console.log(arr6.sort((a, b) => a.age - b.age))

      // 11. reverse()
      // 参数：无
      // 作用：将数组中元素的位置颠倒
      // 返回值：返回颠倒后的该数组
      // 例如：
      const arr7 = ['你在狗叫什么？', '王行']
      console.log(arr7.reverse()) //['王行', '你在狗叫什么？']

      // 12. splice(start,count,addNum1,addNum2,addNum3,addNumN)
      // 参数：接收一个或多个参数,start表示开始位置，count代表删除多少个，addNum1~addNumN代表着可以向其中添加的元素
      // 如果只写start代表着从开始位置一直删除到底
      // 作用：删除数组中某个或者某些元素
      // 返回值：被删除的那个或者那些元素
      // 例如：
      const arr8 = [1, 2, 3, 4, 5, 6, 7]
      console.log(arr8.splice(2)) //[3,4,5,6,7]

      const arr9 = [1, 2, 3, 4, 5, 6, 7]
      console.log(arr9.splice(2, 2)) //[3,4]

      console.log(arr9.splice(2, 2, 3, 4, 5, 6)) //[5,6]
      console.log(arr9) // [1, 2, 3, 4, 5, 6, 7]
    </script>
  </body>
</html>
